package leetcode;

import java.util.HashMap;

/***
 * 题目：执行指令后的得分
 * 链接：https://leetcode.cn/problems/calculate-score-after-performing-instructions/description/
 */

// 额外引入数据结构，hash即可，时间复杂度o(logn)
public class CalculateScore {
    public static void main(String[] args) {
//        String[] instructions = {"jump","add","add","jump","add","jump"};
//        int[] values = {2, 1, 3, 1, -2, -3};
//        String[] instructions = {"jump","add","add"};
//        int[] values = {3,1,1};
        String[] instructions = {"jump"};
        int[] values = {0};
        System.out.println(calculateScore(instructions, values));
    }

    /**
     * 从下标 i = 0 的第一个指令开始，初始得分为 0。
     * 如果 instructions[i] 是 "add"：
     * 将 values[i] 加到你的得分中。
     * 移动到下一个指令 (i + 1)。
     * 如果 instructions[i] 是 "jump"：
     * 移动到下标为 (i + values[i]) 的指令，但不修改你的得分。
     * @param instructions
     * @param values
     * @return
     */
    public static long calculateScore(String[] instructions, int[] values) {
        long score = 0;
        HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
        int i = 0;
        int n = instructions.length;
        while (i >= 0 && i < n && !map.containsKey(i)) {
            map.put(i, 1);
            if ("add".equals(instructions[i])) {
                score += values[i];
                i++;
            } else {
                i = i + values[i];
            }
        }
        return score;
    }
}
